#ifndef KEY_H
#define KEY_H

#include <rthw.h>
#include <rtthread.h>
#include "rtconfig.h"
#include "main.h"


#ifndef KEY_readpin
#define KEY_readpin         HAL_GPIO_ReadPin
#endif

/******************************************************************
 * 函 数 名 button
 * 函 数 说 按键结构体
 * 函 数 形 参：无
 * 函 数 返 回：无
 * 备       注：无
******************************************************************/
typedef struct 
{
    GPIO_TypeDef *gpiox;   //指向GPIO端口的指针
    uint32_t pin;       //指向GPIO的引脚
    uint16_t tick;      //用于计时的变量，通常用于消抖处理
    uint32_t level;      //当前按键的电平，高电平或低电平
    uint8_t id;         //按键的唯一标识符号
    uint8_t state;      //按键的当前状态，用于表示是否被按下或释放 0=空闲 1=按下 2=抬起
    uint8_t debouce_cnt;//按键抖动计数器，用于防止抖动引脚的误触发
    uint8_t repeat;     //按键重复按下的次数
    
}button;

typedef enum {
    key_b0_short_flag = (0x01 <<0),
    key_b0_double_flag = (0x01 <<1)
}KEY_FLAG;

extern rt_event_t key_event;
void key_thread_entry(void *parameter);
#endif
